package com.crl.rcdp.sys.service;

import cn.hutool.core.bean.BeanUtil;
import com.cars.util.bean.BasePage;
import com.cars.util.list.ListUtils;
import com.crl.rcdp.sys.dao.SysApiDao;
import com.crl.rcdp.sys.dao.SysApitypeDao;
import com.crl.rcdp.sys.dto.SysApiDTO;
import com.crl.rcdp.sys.dto.SysApiTreeDTO;
import com.crl.rcdp.sys.model.SysApi;
import com.crl.rcdp.sys.model.SysApitype;
import com.crl.rcdp.sys.vo.SysApiSearchVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @description:
 * @author: 孔垂云
 * @version: 1.0
 * @date: 2020/7/12 11:24
 */
@Service
public class SysApiService {
    @Autowired
    private SysApiDao sysApiDao;
    @Autowired
    private SysApitypeDao sysApitypeDao;

    /**
     * 获取所有接口
     */
    public BasePage<List<SysApiDTO>> page(SysApiSearchVO sysApiSearchVO) {
        BasePage<List<SysApiDTO>> basePage = new BasePage();
        int count = sysApiDao.count(sysApiSearchVO);
        basePage.setTotal(count);
        List<SysApi> list = sysApiDao.list(sysApiSearchVO);
        List<SysApiDTO> listResult = ListUtils.copyList(list, SysApiDTO.class);
        basePage.setData(listResult);
        return basePage;
    }

    /**
     * 新增
     */
    public int add(SysApiDTO sysApiDTO) {
        SysApi sysApi = new SysApi();
        BeanUtil.copyProperties(sysApiDTO, sysApi);
        sysApiDao.add(sysApi);
        return 1;
    }

    /**
     * 根据id修改
     */
    public int update(SysApiDTO sysApiDTO) {
        SysApi sysApi = new SysApi();
        BeanUtil.copyProperties(sysApiDTO, sysApi);
        int flag = sysApiDao.update(sysApi);
        return flag;
    }


    /**
     * 删除
     */
    public int delete(int id) {
        return sysApiDao.delete(id);
    }

    /**
     * 根据资源id获取资源对象
     */
    public SysApiDTO get(int id) {
        SysApiDTO sysApiDTO = new SysApiDTO();
        SysApi sysApi = sysApiDao.get(id);
        if (sysApi != null) {
            BeanUtils.copyProperties(sysApi, sysApiDTO);
        }
        return sysApiDTO;
    }

    /**
     * 获取接口api树
     */
    public List<SysApiTreeDTO> getSysApiTree() {
        List<SysApitype> listType = sysApitypeDao.listAll();
        List<SysApi> list = sysApiDao.listAll();
        List<SysApiTreeDTO> listRet = new ArrayList<>();
        for (SysApitype sysApitype : listType) {
            SysApiTreeDTO sysApiTreeDTO = new SysApiTreeDTO();
            sysApiTreeDTO.setId("T"+sysApitype.getId().toString());//类型id
            sysApiTreeDTO.setName(sysApitype.getName());
            List<SysApiTreeDTO> temp = new ArrayList<>();
            for (SysApi sysApi : list) {
                if (sysApi.getTypeId().equals(sysApitype.getId())) {
                    SysApiTreeDTO sysApiTreeDTO2 = new SysApiTreeDTO();
                    sysApiTreeDTO2.setId(sysApi.getId().toString());
                    sysApiTreeDTO2.setName(sysApi.getName());
                    temp.add(sysApiTreeDTO2);
                }
            }
            sysApiTreeDTO.setChildren(temp);
            listRet.add(sysApiTreeDTO);
        }
        return listRet;
    }

}
